package com.app.utils;

import java.util.*;

public class PhasePairFinder {

    // 存储分组数据的 Map，key 是 "一阶段" (如 "T3-1")
    private final Map<String, List<String>> phaseGroupMap;

    public PhasePairFinder(List<String> rawData) {
        this.phaseGroupMap = new HashMap<>();
        groupData(rawData);
    }

    /**
     * 根据原始数据构建分组
     */
    private void groupData(List<String> rawData) {
        for (String item : rawData) {
            // 严格按第一个逗号分割
            int commaIndex = item.indexOf(',');
            if (commaIndex == -1) {
                System.err.println("无效数据，缺少逗号: " + item);
                continue;
            }

            String firstPhase = item.substring(0, commaIndex).trim();
            // 这里我们存储完整的原始项
            phaseGroupMap.computeIfAbsent(firstPhase, k -> new ArrayList<>()).add(item);
        }
    }

    /**
     * 核心方法：根据已知的完整项 (如 "T3-1,2-1") 查找其配对项 (如 "T3-1,2-2")
     * 配对规则：同一个 "一阶段" 组内的另一个 "X-Y" 格式项
     *
     * @param knownItem 已知的完整数据项
     * @return 配对项，如果找不到则返回 null
     */
    public String findPairedItem(String knownItem) {
        // 1. 解析已知项，获取 "一阶段"
        String firstPhase = extractFirstPhase(knownItem);
        if (firstPhase == null) {
            return null; // 解析失败
        }

        // 2. 获取该 "一阶段" 对应的整个组
        List<String> group = phaseGroupMap.get(firstPhase);
        if (group == null || group.size() < 2) {
            return null; // 该组不存在或项数不足，无法配对
        }

        // 3. 在组内查找与 knownItem 不同的另一项
        for (String item : group) {
            if (!item.equals(knownItem)) { // 找到不同的项
                // 可以在这里添加额外验证，比如检查 item 是否符合 "X-Y" 格式
                // 但根据您的数据，这通常是成立的
                return item;
            }
        }

        return null; // 理论上不会到这里
    }

    /**
     * 辅助方法：从完整项中提取 "一阶段"
     */
    private String extractFirstPhase(String item) {
        int commaIndex = item.indexOf(',');
        if (commaIndex == -1) {
            System.err.println("无效项，缺少逗号: " + item);
            return null;
        }
        return item.substring(0, commaIndex).trim();
    }

    // --- 测试 ---
    public static void main(String[] args) {
        List<String> rawData = Arrays.asList(
                "T3-1,2-1", "T3-1,2-2", "T2-5,6-1", "T2-5,6-2", "T3-3,4-1", "T3-3,4-2","27-N3-1,2","27-N3-3,4","6T3-1","T2-1","28-N1-1,2","28-N3-1,2","4-N1-1","4-N1-2","25-N2-1,2","25-N2-3,4"
        );

        // 创建查找器
        PhasePairFinder finder = new PhasePairFinder(rawData);

        // 测试用例
        String[] testCases = {"T3-1,2-2"};

        for (String known : testCases) {
            String paired = finder.findPairedItem(known);
            System.out.println("已知: " + known + " -> 配对: " + (paired != null ? paired : "未找到"));
        }
    }
}
